//package com.payment.controller.paynotify;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.payment.entity.autosubcon.UserNoCardOrder;
//import com.payment.entity.autosubcon.UserOrderPackage;
//import com.payment.entity.autosubcon.UserOrderPayment;
//import com.payment.entity.newrequestnotify.request.RequestNotify;
//import com.payment.entity.newrequestnotify.response.ResponseNotify;
//import com.payment.entity.payresults.WXNotificationpaymentResults;
//import com.payment.service.*;
//import com.payment.utils.Constant;
//import com.payment.utils.HttpUtil;
//import com.payment.utils.payment.WeiXinPayUtil;
//import io.swagger.annotations.Api;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.log4j.Logger;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.web.bind.annotation.CrossOrigin;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.BufferedOutputStream;
//import java.text.SimpleDateFormat;
//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//
//@RestController
//@Api(description = "微信支付回调")
///**
// * 1，使用领科的微信收款账号收款，微信支付回调接口：
// *
// * 2，适用于新的客户：最新版的的领科 H5 和其他想要使用领科收款接口收款的（可以是客户自己的账号或者领科发账号）客户；
// *
// * 3，更新的数据表为：user_order_package_t，user_order_payment_t；
// *
// * 4，更新的数据库为：v-shop
// *
// * @author lm
// * @date 2019/11/06
// */
//public class WeiXinPayNotifyController {
//
//    private static Logger logger = Logger.getLogger(WeiXinPayNotifyController.class);
//    @Autowired
//    private NotificationpaymentService notificationpaymentService;
//    @Autowired
//    private PartnerService partnerService;
//    @Autowired
//    private UserOrderPackageService orderService;
//    @Autowired
//    private UserOrderPaymentService paymentService;
//    @Autowired
//    private UserNoCardOrderService userNoCardOrderService;
//
//    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//    SimpleDateFormat s = new SimpleDateFormat("yyyyMMddHHmmss");
//
//    /***
//     * 微信支付结果回调
//     * @param request
//     * @param
//     * @return
//     */
//    //@RequestMapping(value = "/wxNotify")
//    @CrossOrigin
//    public String notify(HttpServletRequest request, HttpServletResponse response) {
//
//        try {
//            logger.info("微信支付回调：" + request);
//            Map rMap = WeiXinPayUtil.getNotifyResult(request);
//            String resXml = rMap.get("resXml") + "";
//            logger.info("微信支付回调notify获取的数据：" + rMap.get("resXml") + "");
//            String result_code = rMap.get("result_code") + "";
//            String return_code = rMap.get("return_code") + "";
//            logger.info("结果码:" + result_code + ";返回码：" + return_code);
//            // 向微信输出处理结果，如果成功（SUCCESS），微信就不会继续调用了，否则微信会连续调用8次
//
//            if (result_code.equalsIgnoreCase("SUCCESS") || return_code.equalsIgnoreCase("SUCCESS")) {
//                logger.info("支付成功");
//                String payId = rMap.get("out_trade_no") + "";
//                if (StringUtils.isNotBlank(payId)) {
//                    //为了从微信拿回来的金额能够直接使用
//                    String total_fee = rMap.get("total_fee") + "";
//                    //int fee = Integer.parseInt(total_fee) / 100;
//                    float fee = Float.parseFloat(total_fee) / 100;
//
//                    //相当于付款时的金额
//                    String payAmount = String.valueOf(fee);
//                    String appid = rMap.get("appid") + "";
//                    String bank_type = rMap.get("bank_type") + "";
//                    String cash_fee = rMap.get("cash_fee") + "";
//                    String fee_type = rMap.get("fee_type") + "";
//                    String is_subscribe = rMap.get("is_subscribe") + "";
//                    String mch_id = rMap.get("mch_id") + "";
//                    String nonce_str = rMap.get("nonce_str") + "";
//                    String openid = rMap.get("openid") + "";
//                    String sign = rMap.get("sign") + "";
//                    String time_end = rMap.get("time_end") + "";
//                    String trade_type = rMap.get("trade_type") + "";
//                    String transaction_id = rMap.get("transaction_id") + "";
//
//                    //去数据库查询out_trade_no是不是已经入过库
//                    int count = notificationpaymentService.findCountByOutTradeno(payId);
//
//                    if (count < 1) {
//
//                        //将微信回传的交易记录入库保存下来
//                        WXNotificationpaymentResults results = new WXNotificationpaymentResults();
//                        results.setBankType(bank_type);
//                        results.setAppid(appid);
//                        results.setCashFee(cash_fee);
//                        results.setFeeType(fee_type);
//                        results.setIsSubscribe(is_subscribe);
//                        results.setMchId(mch_id);
//                        results.setNonceStr(nonce_str);
//                        results.setOpenid(openid);
//                        results.setOutTradeNo(payId);
//                        results.setResultCode(result_code);
//                        results.setReturnCode(return_code);
//                        results.setSign(sign);
//                        results.setTimeEnd(time_end);
//                        results.setTotalFee(total_fee);
//                        results.setTradeType(trade_type);
//                        results.setTransactionId(transaction_id);
//
//                        notificationpaymentService.insertPaymentResults(results);
//                    }
//
//                    int c = orderService.findPayIdByNotify(payId);
//                    if (c <= 0) {
//                        // 成功的回调数据入库：根据支付id和金额入库：user_order_package_t
//                        List<UserOrderPackage> deviceCodeList = orderService.queryDeviceCodeByPayId(payId);
//
//                        for (UserOrderPackage uo : deviceCodeList) {
//
//                            String deviceCode = uo.getDeviceCode();
//
//                            if (StringUtils.isNotBlank(deviceCode)) {
//
//                                String str1 = deviceCode.substring(0, 1);
//
//                                if (!str1.equals("卡") && !str1.equalsIgnoreCase("c")) {
//
//                                    UserOrderPackage order = new UserOrderPackage();
//                                    order.setOrderStatus("3");
//                                    order.setPayId(payId);
//                                    order.setPayCurrency(fee_type);
//                                    order.setPayAmount(payAmount);
//                                    order.setPayType(Constant.PAY_WEIXIN);
//                                    order.setPayRst("success");
//                                    order.setIsNotify("1");
//                                    order.setPayAccount("1");
//                                    order.setTransactionId(transaction_id);
//                                    order.setUpdateDate(sdf.format(new Date()));
//                                    order.setOrderTime(s.format(new Date()));
//                                    orderService.updateWeiXinPayRst(order);
//
//                                } else {
//                                    UserOrderPackage order = new UserOrderPackage();
//                                    //待发货
//                                    order.setOrderStatus("1");
//                                    order.setPayId(payId);
//                                    order.setPayCurrency(fee_type);
//                                    order.setPayAmount(payAmount);
//                                    order.setPayType(Constant.PAY_WEIXIN);
//                                    order.setPayRst("success");
//                                    order.setIsNotify("1");
//                                    order.setPayAccount("1");
//                                    order.setTransactionId(transaction_id);
//                                    orderService.updateWeiXinPayRst(order);
//                                }
//                            } else {
//                                //deviceCode没取到值，但是支付记录还是要入库
//                                UserOrderPackage order = new UserOrderPackage();
//                                order.setUpdateDate(sdf.format(new Date()));
//                                order.setOrderTime(s.format(new Date()));
//                                order.setOrderStatus("3");
//                                order.setPayId(payId);
//                                order.setPayCurrency(fee_type);
//                                order.setPayAmount(payAmount);
//                                order.setPayType(Constant.PAY_WEIXIN);
//                                order.setPayRst("success");
//                                order.setIsNotify("1");
//                                order.setPayAccount("1");
//                                order.setTransactionId(transaction_id);
//                                orderService.updateWeiXinPayRst(order);
//                            }
//
//                        }
//
//                        //成功的回调数据入库：根据支付id和金额入库：user_order_payment_t
//                        UserOrderPayment payment = new UserOrderPayment();
//                        payment.setPayId(payId);
//                        payment.setPayCurrency(fee_type);
//                        payment.setPayAmount(payAmount);
//                        payment.setPayType(Constant.PAY_WEIXIN);
//                        payment.setPayRst("success");
//                        payment.setTransactionId(transaction_id);
//                        paymentService.updateWeiXinPayRst(payment);
//
//                        //无卡订单支付结果入库：user_nocard_order_t
//                        UserNoCardOrder noCardOrder = new UserNoCardOrder();
//                        noCardOrder.setPayId(payId);
//                        noCardOrder.setPayRst("success");
//                        userNoCardOrderService.updatePayRst(noCardOrder);
//
//                        //将去北京做支付结果通知的工作交到具体的orderService处理类中去
//                        List<UserOrderPackage> userOrderList = orderService.queryOrderByPayIdAndAmount(payId, payAmount);
//
//                        if (userOrderList != null && !userOrderList.isEmpty()) {
//                            for (UserOrderPackage u : userOrderList) {
//
//                                String partnerCode = u.getPartnerCode();
//                                String orderId = u.getOrderId();
//                                String deviceId = u.getDeviceCode();
//                                String Amount = u.getPayAmount();
//                                String secret = partnerService.findSecretByPartnerCode(partnerCode);
//                                logger.debug("查询到的订单orderId是:" + orderId + ";DeviceId是:" + deviceId + ";payAmount是：" + Amount + ";密钥是：" + secret);
//
//                                RequestNotify notify = new RequestNotify();
//                                notify.setDeviceId(deviceId);
//                                notify.setOrderId(orderId);
//                                notify.setPayAmount(Amount);
//                                notify.setPayType(Constant.PAY_WEIXIN);
//                                notify.setSecret(secret);
//                                notify.setPartnerCode(partnerCode);
//                                // 开始组装json
//                                String requestStr = JSON.toJSONString(notify);
//                                logger.debug("请求北京的接口请求报文：" + requestStr);
//                                String url = Constant.requestURI + Constant.iot_notify;
//                                // 发送post请求，并接收返回结果
//                                String returnStr = HttpUtil.httpPost(url, requestStr);
//                                logger.debug("北京回复的下发接口响应报文：" + returnStr);
//                                ResponseNotify re = JSONArray.parseObject(returnStr, ResponseNotify.class);
//
//                                if (re != null) {
//                                    if (true == Constant.RET_CODE_0000.equalsIgnoreCase(re.getRetCode())
//                                            || true == Constant.RET_CODE_0113.equalsIgnoreCase(re.getRetCode())) {
//                                        UserOrderPackage user = new UserOrderPackage();
//                                        user.setOrderId(orderId);
//                                        user.setPayId(payId);
//                                        user.setIsNotify("0");
//                                        orderService.updateWeiXinIsNotify(user);
//
//                                    } else {
//                                        logger.debug("同步不成功");
//                                        return null;
//                                    }
//                                } else {
//                                    logger.debug("同步接口异常");
//                                    return null;
//                                }
//
//
//                            }
//
//                        } else {
//                            logger.debug("数据库查询到的订单为null");
//                            return null;
//                        }
//
//
//                    } else {
//                        logger.debug("回调数据已经入过库");
//                        return null;
//                    }
//
//
//                } else {
//                    logger.debug("回调单号payId为null");
//                    return null;
//
//                }
//
//
//            } else {
//
//                logger.debug("支付失败Fail");
//                String payId = rMap.get("out_trade_no") + "";
//                if (StringUtils.isNotBlank(payId)) {
//                    //为了从微信拿回来的金额能够直接使用
//                    String total_fee = rMap.get("total_fee") + "";
//                    //int fee = Integer.parseInt(total_fee) / 100;
//                    float fee = Float.parseFloat(total_fee) / 100;
//                    //相当于付款时的金额
//                    String payAmount = String.valueOf(fee);
//                    String appid = rMap.get("appid") + "";
//                    String bank_type = rMap.get("bank_type") + "";
//                    String cash_fee = rMap.get("cash_fee") + "";
//                    String fee_type = rMap.get("fee_type") + "";
//                    String is_subscribe = rMap.get("is_subscribe") + "";
//                    String mch_id = rMap.get("mch_id") + "";
//                    String nonce_str = rMap.get("nonce_str") + "";
//                    String openid = rMap.get("openid") + "";
//                    String sign = rMap.get("sign") + "";
//                    String time_end = rMap.get("time_end") + "";
//                    String trade_type = rMap.get("trade_type") + "";
//                    String transaction_id = rMap.get("transaction_id") + "";
//
//                    //去数据库查询out_trade_no是不是已经入过库
//                    int count = notificationpaymentService.findCountByOutTradeno(payId);
//                    if (count <= 0) {
//                        //将微信回传的交易记录入库保存下来
//                        WXNotificationpaymentResults results = new WXNotificationpaymentResults();
//                        results.setAppid(appid);
//                        results.setBankType(bank_type);
//                        results.setCashFee(cash_fee);
//                        results.setFeeType(fee_type);
//                        results.setIsSubscribe(is_subscribe);
//                        results.setMchId(mch_id);
//                        results.setNonceStr(nonce_str);
//                        results.setOpenid(openid);
//                        results.setOutTradeNo(payId);
//                        results.setResultCode(result_code);
//                        results.setReturnCode(return_code);
//                        results.setSign(sign);
//                        results.setTimeEnd(time_end);
//                        results.setTotalFee(total_fee);
//                        results.setTradeType(trade_type);
//                        results.setTransactionId(transaction_id);
//                        notificationpaymentService.insertPaymentResults(results);
//                    }
//
//                    int c = orderService.findPayIdByNotify(payId);
//                    if (c <= 0) {
//                        // 成功的回调数据入库：根据支付id和金额入库：user_order_package_t
//                        UserOrderPackage order = new UserOrderPackage();
//                        order.setPayId(payId);
//                        order.setPayCurrency(fee_type);
//                        order.setPayAmount(payAmount);
//                        order.setPayType(Constant.PAY_WEIXIN);
//                        order.setPayRst("fail");
//                        order.setIsNotify("1");
//                        order.setPayAccount("1");
//                        order.setTransactionId(transaction_id);
//                        orderService.updateWeiXinPayRst(order);
//
//                        //成功的回调数据入库：根据支付id和金额入库：user_order_payment_t
//                        UserOrderPayment payment = new UserOrderPayment();
//                        payment.setPayId(payId);
//                        payment.setPayCurrency(fee_type);
//                        payment.setPayAmount(payAmount);
//                        payment.setPayType(Constant.PAY_WEIXIN);
//                        payment.setPayRst("fail");
//                        payment.setTransactionId(transaction_id);
//                        paymentService.updateWeiXinPayRst(payment);
//
//                        //无卡订单支付结果入库：user_nocard_order_t
//                        UserNoCardOrder noCardOrder = new UserNoCardOrder();
//                        noCardOrder.setPayId(payId);
//                        noCardOrder.setPayRst("fail");
//                        userNoCardOrderService.updatePayRst(noCardOrder);
//
//
//                    } else {
//                        logger.info("回调数据已经入过库");
//                        return null;
//                    }
//
//
//                } else {
//                    logger.info("回调单号payId为null");
//                    return null;
//
//                }
//            }
//            //回复微信说：你不要在发信息给我，我收到了
//            BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());
//            out.write(resXml.getBytes());
//            out.flush();
//            out.close();
//
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        return null;
//    }
//}
